home *** CD-ROM | disk | FTP | other *** search
/ Clipper Collection / Clipper Collection.iso / clipper7 / nannws36.arc / SAY_XCMD.C < prev    next >
Text File  |  1989-05-01  |  2KB  |  90 lines

  1. /* Program: SAY_XCMD.C                                      */
  2. /* Author:  Michael Herman                                  */
  3. /* Copyright (c) 1989 Nantucket Corp.  All Rights Reserved. */
  4.  
  5. #include <MacTypes.h>
  6. typedef struct
  7. {
  8.     short int  paramCount;
  9.     Handle     params[16];
  10.     Handle     returnValue;
  11.     Boolean    passFlag;
  12.     void       (*entryPoint)();
  13.     short int  request;
  14.     short int  result;
  15.     long       inArgs[8];
  16.     long       outArgs[4];
  17. } *XCmdBlockPtr;
  18.  
  19. /* The PASCAL types SpeechOn, Reader, MacinTalk and SpeechOff are
  20. PASCAL functions of MACINTALK being called from within the C
  21. program. Also the XCmdBlockPtr function is taking the place of
  22. MAIN() since XCMDs have no header bytes. */
  23.  
  24. pascal    int SpeechOn(char*, Handle*);
  25. pascal    int Reader(Handle, char*, long, Handle);
  26. pascal    int MacinTalk(Handle, Handle);
  27. pascal    void SpeechOff(Handle);
  28. pascal    void main(XCmdBlockPtr);
  29. int       Upper(char*);
  30. void    strcpy(char*, char*);
  31.  
  32. pascal void main(paramPtr)
  33. XCmdBlockPtr paramPtr;
  34. {
  35.      int  err, len;
  36.      Handle theSpeech, Phonemes;
  37.      asm { move.l a0, a4 } /* So that we can properly access
  38. globals and literals */
  39.      paramPtr->returnValue = NewHandle(256L);
  40.      if (paramPtr->paramCount > 0)
  41.      {
  42.        len = Upper(*paramPtr->params[0]);
  43.        err = SpeechOn("", &theSpeech);
  44.        if (err == 0)
  45.        {
  46.          Phonemes = NewHandle(0L);
  47.          err = Reader(theSpeech, (char*)(*paramPtr->params[0]),
  48. (long) len,Phonemes);
  49.          if (err == 0)
  50.          {
  51.            err = MacinTalk(theSpeech, Phonemes);
  52.            if (err == 0)
  53.              strcpy((char*)(*paramPtr->returnValue), "Ok.");
  54.            else
  55.              strcpy((char*)(*paramPtr->returnValue),
  56.  "Error: MacinTalk.");
  57.          }
  58.    else
  59.          strcpy((char*)(*paramPtr->returnValue), "Error: Reader.");
  60.          DisposHandle(Phonemes);
  61.          SpeechOff(theSpeech);
  62.          }
  63. else
  64.          strcpy((char*)(*paramPtr->returnValue), "Error: Can't load
  65. MacinTalk.");
  66.      }
  67.      else
  68.    strcpy((char*)(*paramPtr->returnValue), "Error: Not enough
  69. parameters.");
  70. }
  71. int Upper(str)
  72. char *str;
  73. {
  74.      int i=0;
  75.      while (str[i] != 0)
  76.      {
  77.           if (str[i] > 96 && str[i] < 123)
  78.                str[i] &= 0xdf;
  79.           i++;
  80.      }
  81.      return (i);
  82. }
  83. void strcpy(s1, s2)
  84. char *s1, *s2;
  85. {
  86.      int i=0;
  87.      while (s1[i] = s2[i])
  88.           i++;
  89. }
  90.